﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using GSQ.BusinessEntities;
using GSQ.BusinessLogic;

namespace UIapp.Dialogos
{
    public partial class frmOriginalesAdicionales : Plantillas.frmDialogPlantilla, Interfaces.IPantalla
    {
        public frmOriginalesAdicionales(ORIGINALES_ADICIONALES entity)
        {
            InitializeComponent();
            try
            {
                if (entity == null)
                {
                    this.newEntity = new ORIGINALES_ADICIONALES();
                    this.oldEntity = null;
                }
                else
                {
                    this.newEntity = entity;
                    this.oldEntity = new OriginalesAdicionalesBL().GetByNroAdicional(entity.NRO_ADICIONAL);
                    this.BindControls();
                }
            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        #region Variables
        public ORIGINALES_ADICIONALES newEntity;
        public ORIGINALES_ADICIONALES oldEntity;
        bool entityError = false;
        #endregion

        #region Implementacion IPantalla
        public int ComandosSoportados
        {
            get { return 0; }
        }

        public void Nuevo()
        {
            throw new NotImplementedException();
        }

        public void Modificar()
        {
            throw new NotImplementedException();
        }

        public void Eliminar()
        {
            throw new NotImplementedException();
        }

        public void Refrescar()
        {
            throw new NotImplementedException();
        }

        public void Buscar()
        {
            throw new NotImplementedException();
        }

        public void AgregarProducto(Controles.TransferEntity tranferEntity)
        {
            throw new NotImplementedException();
        }
        #endregion

        #region Metodos auxiliares
        public void BindControls()
        {
            if (this.newEntity != null)
            {
                this.txtNroOriginal.Text = this.newEntity.ORIGINALES.NRO_ORIGINAL;
                this.txtNroAdicional.Text = this.newEntity.NRO_ADICIONAL;
                if (this.newEntity.ORIGINALES != null)
                {
                    if (this.newEntity.DESCRIPCIONES != null)
                    {
                        this.txtIdDescripcion.Text = this.newEntity.DESCRIPCIONES.ID.ToString();
                        this.txtDescripcion.Text = this.newEntity.DESCRIPCIONES.DESCRIPCION;
                    }
                    if (this.newEntity.CATEGORIAS != null)
                    {
                        this.txtIdCategoria.Text = this.newEntity.CATEGORIAS.ID.ToString();
                        this.txtCategoria.Text = this.newEntity.CATEGORIAS.CATEGORIA;
                    }

                    if (this.newEntity.DEPARTAMENTOS != null)
                    {
                        this.txtIdDepartamento.Text = this.newEntity.ID_DEPARTAMENTO.ToString();
                        this.txtDepartamento.Text = this.newEntity.DEPARTAMENTOS.DEPARTAMENTO;
                    }
                }
            }
        }

        private void Guardar()
        {
            this.newEntity.NRO_ADICIONAL = this.txtNroAdicional.Text.Trim();

            if (newEntity.IsValid())
            {
                if (this.oldEntity == null)
                {
                    new OriginalesAdicionalesBL().Insert(this.newEntity);
                }
                else
                {
                    new OriginalesAdicionalesBL().Update(this.newEntity, this.oldEntity);
                }
                this.entityError = false;
            }
            else
            {
                this.entityError = true;
                Comun.ShowMessage(newEntity);
            }
        }

        private bool BuscarDepartamento()
        {
            decimal id = 0;
            DEPARTAMENTOS departamento;
            if (decimal.TryParse(this.txtIdDepartamento.Text.Trim(), out id))
            {
                if (this.newEntity.ID_DEPARTAMENTO == 0 || this.newEntity.ID_DEPARTAMENTO != id)
                {
                    departamento = new DepartamentosBL().GetById(id);
                    if (departamento != null && departamento.ACTIVO)
                    {
                        this.newEntity.ID_DEPARTAMENTO = departamento.ID;
                        this.txtDepartamento.Text = departamento.DEPARTAMENTO;
                        this.newEntity.DEPARTAMENTOS = departamento;
                        return true;
                    }
                    else
                    {
                        Comun.ShowInMainMessage("No existen datos con este código");
                        this.newEntity.ID_DEPARTAMENTO = 0;
                        this.newEntity.DEPARTAMENTOS = null;
                        this.txtDepartamento.Clear();
                        this.txtIdDepartamento.Focus();
                        return false;
                    }
                }
                return true;
            }
            this.newEntity.ID_DEPARTAMENTO = 0;
            this.newEntity.DEPARTAMENTOS = null;
            this.txtDepartamento.Clear();
            this.txtIdDepartamento.Focus();
            Comun.ShowInMainMessage("Solo números son permitidos en este campo");
            return false;
        }

        #endregion

        #region Tratamiento de eventos

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                this.backgroundWorker.RunWorkerAsync();
                Comun.ShowLoadingFRM();
            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            this.Guardar();
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            Comun.CloseLoadingFRM();
            if (e.Error != null)
                Comun.ShowMessage(e.Error);
            else if (this.entityError)
                return;
            else
            {
                Comun.ShowInMainMessage("Datos guardados correctamente...");
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
        }

        private void txtIdDepartamento_Validating(object sender, CancelEventArgs e)
        {
            try
            {
                if (this.txtIdDepartamento.Text.Length > 0)
                {
                    if (!this.BuscarDepartamento())
                    {
                        this.txtDepartamento.Clear();
                        this.txtIdDepartamento.Focus();
                    }
                }
                else
                {
                    this.newEntity.ID_DEPARTAMENTO = 0;
                    this.txtDepartamento.Clear();
                }
            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void txtIdDepartamento_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F9)
            {
                Busquedas.frmCatalogos frm = new Busquedas.frmCatalogos(Comun.Catalogos.Departamentos);
                frm.ShowDialog();
                if (frm.DialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    this.newEntity.ID_DEPARTAMENTO = ((DEPARTAMENTOS)frm.radGridView.CurrentRow.DataBoundItem).ID;
                    this.txtIdDepartamento.Text = ((DEPARTAMENTOS)frm.radGridView.CurrentRow.DataBoundItem).ID.ToString();
                    this.txtDepartamento.Text = ((DEPARTAMENTOS)frm.radGridView.CurrentRow.DataBoundItem).DEPARTAMENTO;
                    this.newEntity.DEPARTAMENTOS = ((DEPARTAMENTOS)frm.radGridView.CurrentRow.DataBoundItem);
                }
            }
        }

        private void txtNroOriginal_Validating(object sender, CancelEventArgs e)
        {
            if (this.txtNroOriginal.Text.Trim() != string.Empty)
            {
                if (this.newEntity.ORIGINALES != null && this.newEntity.ORIGINALES.NRO_ORIGINAL == this.txtNroOriginal.Text.Trim())
                    return;

                ORIGINALES ori = new OriginalesBL().GetByNroOriginal(this.txtNroOriginal.Text.Trim());

                if (ori != null)
                {
                    this.newEntity.ORIGINALES = null;
                    this.newEntity.ID_ORIGINAL = ori.ID;
                    this.newEntity.ORIGINALES = ori;
                    this.newEntity.DESCRIPCIONES = ori.DESCRIPCIONES;
                    this.newEntity.CATEGORIAS = ori.CATEGORIAS;
                    this.BindControls();
                }
                else
                {
                    this.newEntity.ORIGINALES = null;
                    this.txtIdDescripcion.Clear();
                    this.txtDescripcion.Clear();
                    this.txtCategoria.Clear();
                    txtIdCategoria.Clear();
                    Comun.ShowInMainMessage("No hay datos con este código");
                    this.txtNroOriginal.Focus();
                }
            }
            else
            {
                this.newEntity.ORIGINALES = null;
                this.newEntity.ID_ORIGINAL = 0;
                this.txtIdDescripcion.Clear();
                this.txtDescripcion.Clear();
                this.txtCategoria.Clear();
                txtIdCategoria.Clear();
            }
        }
        
        private void txtNroOriginal_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F9)
            {
                e.Handled = true;
                Vistas.frmOriginales frm = new Vistas.frmOriginales(false);
                frm.ShowDialog();
                if (frm.DialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    this.txtNroOriginal.Text = ((ORIGINALES)frm.radGridView.CurrentRow.DataBoundItem).NRO_ORIGINAL;

                }
            }
        }
        #endregion
    }
}
